//
// Created by wenyaxi on 24-11-4.
//
#pragma once
#ifndef RANDOM_H
#define RANDOM_H

#include <base.h>

#include <type_traits>

class RandomUtils {
public:
    // 生成范围 [min, max] 的随机数（自动推断整数或浮点数）
    template <typename T>
    static T get(T min, T max) {
        if constexpr (std::is_integral_v<T>) {
            std::uniform_int_distribution<T> dist(min, max);
            return dist(gen());
        } else {
            std::uniform_real_distribution<T> dist(min, max);
            return dist(gen());
        }
    }

private:
    // 线程安全的随机数引擎（C++11 静态局部变量保证初始化线程安全）
    static std::mt19937& gen() {
        static std::random_device rd;
        static std::mt19937 engine(rd());
        return engine;
    }
};

#endif //RANDOM_H
